www.gusucode.com > VC++网络版的打字软件源程序-源码程序 > VC++网络版的打字软件源程序-源码程序\code\TypeClt V2.0\InputLanguage.cpp
// InputLanguage.cpp: implementation of the CInputLanguage class. // Download by http://www.NewXing.com ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "Type.h" #include "InputLanguage.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CInputLanguage::CInputLanguage() { m_pILHead=NULL; LoadInputLanguage(); } CInputLanguage::~CInputLanguage() { } BOOL CInputLanguage::LoadInputLanguage() { HKEY hKey,hKey1; DWORD cp=16; char lp[15]; CString szID; CString szKeyName,szKeyName1; szKeyName="keyboard layout\\preload"; szKeyName1="system\\currentcontrolset\\control\\keyboard layouts\\"; int i=1; szID.Format("%d",i); DWORD lpT=REG_SZ; if(::RegOpenKey(HKEY_CURRENT_USER,szKeyName,&hKey)==ERROR_SUCCESS) { while(::RegQueryValueEx(hKey,szID,NULL,&lpT,(LPBYTE)lp,&cp)==ERROR_SUCCESS) { CString szTempName; szTempName=szKeyName1+(LPCTSTR)(LPCTSTR)lp; if(::RegOpenKey(HKEY_LOCAL_MACHINE,szTempName,&hKey1)==ERROR_SUCCESS) { char lpD[100]; DWORD lps=100; if(::RegQueryValueEx(hKey1,"Layout text",NULL,&lpT,(LPBYTE)lpD,&lps)==ERROR_SUCCESS) { IL* p1; IL* p2; p1=m_pILHead; p2=new(IL); strcpy(p2->ilID,lp); strcpy(p2->szName,lpD); p2->pNext=NULL; if(p1) { while(p1->pNext) { p1=p1->pNext; } p1->pNext=p2; } else { m_pILHead=p2; } } } ::RegCloseKey(hKey1); i++; szID.Format("%d",i); } } ::RegCloseKey(hKey); return (m_pILHead!=NULL); } void CInputLanguage::Clear() { IL* p1; IL* p2; p1=m_pILHead; while(p1) { p2=p1; p1=p1->pNext; delete(p2); } m_pILHead=NULL; } BOOL CInputLanguage::SelectInputLanguage(IL *pIL) { if(!pIL) { return FALSE; } HKL hk1; hk1=::LoadKeyboardLayout(pIL->ilID,KLF_ACTIVATE); if(hk1==NULL) { return FALSE; } else { ::ActivateKeyboardLayout(hk1,KLF_SETFORPROCESS); } return TRUE; } IL* CInputLanguage::GetInputLanguageList() { return m_pILHead; }